package cn.tedu.ivos.vehicle.service.impl;

import cn.tedu.ivos.base.exception.ServiceException;
import cn.tedu.ivos.base.response.StatusCode;
import cn.tedu.ivos.vehicle.mapper.VehicleMapper;
import cn.tedu.ivos.vehicle.pojo.dto.VehicleQuery;
import cn.tedu.ivos.vehicle.pojo.dto.VehicleSaveParam;
import cn.tedu.ivos.vehicle.pojo.entity.Vehicle;
import cn.tedu.ivos.vehicle.pojo.vo.VehicleVO;
import cn.tedu.ivos.vehicle.service.VehicleService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

@Slf4j
@Service
public class VehicleServiceImpl implements VehicleService {
	@Autowired
	VehicleMapper vehicleMapper;
	
	@Override
	public List<VehicleVO> selectVehicle(VehicleQuery vehicleQuery) {
		log.debug("查询车辆业务,参数={}",vehicleQuery);
		List<VehicleVO> list = vehicleMapper.selectVehicle(vehicleQuery);
		return list;
	}
	
	
	@Override
	public void saveVehicle(VehicleSaveParam vehicleSaveParam) {
		log.debug("保存车辆业务,参数={}",vehicleSaveParam);
		Vehicle vehicle = new Vehicle();
		BeanUtils.copyProperties(vehicleSaveParam,vehicle);
		//判断车牌号是否存在
		VehicleVO vehicleVO =vehicleMapper.selectVehicleByLicense(vehicle.getLicense());
		if(vehicle.getId()==null){
			if(vehicleVO != null){
				throw new ServiceException(StatusCode.LICENSE_EXISTS);
			}
			vehicle.setStatus("1");
			vehicle.setGeofenceBindStatus("0");
			vehicle.setCreateTime(new Date());
			vehicleMapper.insert(vehicle);
		}else{//更新
			//如果车牌号已存在,且不是本辆车的车牌号(与其它已存在的车牌号重复)
			if(vehicleVO != null && vehicleVO.getId() != vehicle.getId()){
				throw new ServiceException(StatusCode.LICENSE_EXISTS);
			}
			vehicle.setUpdateTime(new Date());
			vehicleMapper.update(vehicle);
		}
	}
	
	@Override
	public void deleteVehicle(Long id) {
		log.debug("删除车辆业务,参数={}",id);
		vehicleMapper.deleteById(id);
		
	}
	
	@Override
	public void unbindVehicle(Long vehicleId) {
		log.debug("解绑车辆业务,参数={}",vehicleId);
		// 创建车辆对象并设置相关属性
		Vehicle vehicle = new Vehicle();
		vehicle.setId(vehicleId);							// 设置车辆ID
		vehicle.setGeofenceBindStatus("0");					// 设置围栏绑定状态为未绑定
		vehicle.setGeofenceId(null);						// 清空围栏ID
		vehicle.setUpdateTime(new Date());					// 设置更新时间
		// 调用mapper方法更新车辆信息，包括空值字段
		vehicleMapper.updateNullValue(vehicle);
	}
	
	@Override
	public void bindVehicle(Long geofenceId, Long vehicleId) {
		log.debug("绑定车辆业务,参数{},{}", geofenceId, vehicleId);
		// 创建车辆对象并设置相关属性
		Vehicle vehicle = new Vehicle();
		vehicle.setId(vehicleId);							// 设置车辆ID
		vehicle.setGeofenceBindStatus("1");					// 设置围栏绑定状态为已绑定
		vehicle.setGeofenceId(geofenceId);					// 设置围栏ID
		vehicle.setUpdateTime(new Date());					// 设置更新时间
		// 调用mapper方法更新车辆信息
		vehicleMapper.update(vehicle);
	}
	
}
	
